C++已经走过40年的历史了,如今依旧在各个重要领域发挥着积极的作用,在TIOBE的编程语言排名中也始终位于前列。
C++是一门这样的编程语言:
- 兼顾底层计算机硬件系统和高层应用抽象机制
- 从实际问题出发,注重零成本抽象、性能、可移植性、与C兼容
- 语言特性和细节很多,学习成本较高,是一门让程序员很难敢说精通的语言
C++是自由的,支持5种编程风格:
- 面向过程编程
- 数据抽象编程
- 面向对象编程
- 泛型编程
- 函数式编程
C++的重要历史阶段
纵观C++的整个发展和演化的历史,C++经历了5个重要的时期:
- C with classes: 站在C语言的肩膀上
- 标准化前的C++: C++正式问世,不断演化,走向标准化之路
- C++98: 第一个国际标准化的版本
- C++11: Modern C++
- C++20: 感觉像一门新的编程语言
1979 - 1981: C with classes
- 在C语言的基础上,开始了「带类的C」的尝试
- 这个阶段的C++没有被看作是一门新的编程语言,也没有C++这个名字,只是一个更好的C
- 这个时期最重要的是引入了Simula语言的类和继承的概念,使用Cpre预处理器实现
- 类
- class是一种类型扩展机制,可以让程序员自定义数据类型
- 用户自定义的数据类型和内置基本数据类型一样,是语言的「第一等公民」
- 权限控制只有public和private,没有protected
- 支持构造函数和析构函数
- 支持调用函数和返回函数
- 单继承
- 内联函数
- 友元类
- 函数参数类型检查
- 函数默认参数
- 赋值运算符重载
- 支持new和delete运算符
- 改进了C中不友好的语法
- 早期的指导思想
- 与C语言兼容
- C的语言特性均可用
- 对象的内存布局和C结构体一致
- 使用和C一样的链接模型
- 比C语言提供更高层的抽象机制
- 性能、可移植性要和C一样好
1982 - 1985: Cfront 1.0
- 从1982年开始,C++开始定位作为一个新的编程语言,使用编译技术重新实现了「带类的C」,对应的编译器为Cfront
- 1983年底,C++正式被命名
- Cfront的工作原理:将C++代码先通过Cfront翻译为C代码,然后通过C编译器进行编译和链接
- 这个时期的C++语言特性和「C with classes」一致,主要支持面向过程、数据抽象的编程风格
- 1985年,Cfront 1.0发布
- 1985年,《The C++ Programming Language》第一版发布
1986 - 1989: Cfront 2.0
- 从1986年开始,C++开始引入一些重要的语言特性,让C++明显区别于C
- 虚函数
- 虚函数的引入,对C++意义重大
- 让C++正式支持了面向对象的编程风格
- 让程序员有了更强大的设计意图表达工具
- 函数和运算符重载
- 引用
- const
- 类级的new和delete运算符重载
- 改进的静态类型检查
- 引入新的注释//
- 多重继承
- protected访问
- static静态成员
- const成员
- 指向成员的指针
- 去掉调用函数和返回函数
- 1987年,C++ support in GCC 1.15.3
- 1989年,Cfront 2.0发布
1990 - 1993: Cfront 3.0
- 1990年,《The Annotated C++ Reference Manual》发布
- 引入了C++高级特性,让C++作为一个编程语言趋于完善
- 命名空间
- 异常
- 模板
- 让C++支持了泛型编程风格
- 对标准库STL的实现至关重要
- 嵌套类
- 1991年, Cfront 3.0发布
- 1991年,《The C++ Programming Language》第二版发布
- 1993年, Cfront退出了历史舞台
- ISO/IEC 14882:1998
- C++标准委员会发布了C++语言的第一个国际标准
- 确定了C++的核心语言特性和标准库STL
- 引入的新语言特性
- 运行时类型识别RTTI
- mutable
- bool
- declarations in conditions
- template instantiations
- member templates
- export
- 1998年,《The C++ Programming Language》第三版发布
2003: C++03
- ISO/IEC 14882:2003
- C++98的修订版本
- 引入新的语言特性
- ISO/IEC 14882:2011
- 正式迈进新时代:现代C++
- C++也进入了一个新的快速发展期,每3年发布一个版本
- 2013年,《The C++ Programming Language》第四版发布
- 引入了很多新的语言特性
- 类型推导: auto、decltype
- 右值引用和移动语义
- 变参模板
- lambda和后置返回值
- constexpr
- static_assert
- 类机制完善
- 移动构造函数和赋值运算符重载函数
- 支持=default和=delete,完善编译器自动生成函数的控制
- 委托构造
- 支持final,完善继承
- 支持override,完善虚函数
- range-for
- enum class
- nullptr
- 新增内置数据类型:long long、char16_t、char32_t
- 类内初始化
- 统一初始化
- using定义类型别名
- noexcept
- thread_local
- etc.
- 完善了标准库STL
- 重新实现了STL的数据结构和算法
- 新增散列表和集合std::unordered_map、std::unordered_set
- 新增元组std::tuple、单向链表std::forward_list、数组std::array
- 移动函数std::move
- 完美转发std::forward
- 智能指针std::unique_ptr、std::shared_ptr、std::weak_ptr
- 回调函数std::function、std::bind
- 多线程std::thread
- 多线程同步std::mutex、std::condition_variable、std::lock_guard、std::unique_lock
- 异步任务std::promise、std::future、std::packaged_task、std::async
- 原子操作std::atomic
- 时间函数std::chrono
- 初始化列表std::initialize_list
- 模板元编程type_traits
- 正则表达式std::regex
- 随机数生成random
- etc.
- ISO/IEC 14882:2014
- C++11的修订版本
- 完善C++11的语言特性
- variable templates
- generic lambdas
- lambda init-capture
- new/delete elision
- relaxed restrictions on constexpr functions
- binary literals
- digit separators
- return type deduction for functions
- aggregate classes with default non-static member initializers.
- 完善标准库STL
- std::make_unique
- std::shared_timed_mutex and std::shared_lock
- std::integer_sequence
- std::exchange
- std::quoted
- and many small improvements to existing library facilities, such as
- two-range overloads for some algorithms
- type alias versions of type traits
- user-defined literals for basic_string, duration and complex
- etc.
- ISO/IEC 14882:2017
- 一个C++11的重要补充版本,引入了不少新的特性
- 构造函数模板推导
- 结构化绑定
- if-switch语句初始化
- 内联变量
- 折叠表达式
- constexpr lambda表达式
- namespace嵌套
- __has_include预处理表达式
- 在lambda表达式用*this捕获对象副本
- 新增Attribute
- 字符串转换
- std::variant
- std::optional
- std::any
- std::apply
- std::make_from_tuple
- as_const
- std::string_view
- file_system
- std::shared_mutex
- ISO/IEC 14882:2020
- 一个比肩C++11的重大版本
- 全新的语言特性,让C++20看起来更加符合现代化的特征
- module
- concept
- 增强了模板的设计表达能力,让模板更好用了
- 模板的错误提示变得友好
- 协程
- range
正在路上的C++23
- 完善标准库STL,值得期待的4个功能
- 标准库对于协程的支持(Library support for coroutines)
- 模块化的标准库(A modular standard library)
- Executors
- networking(基于ASIO)
C 参考手
learncpp
learncpp中文
cplusplus
tutorialspoint
isocpp
C++之父
菜鸟教程
w3school C++
有趣的网站:
免费 C++ 开源库和其它有用的工具
提供了免费的 C++ 源代码和 C++ 库,这些源代码和库涵盖了压缩、存档、游戏编程、标准模板库和 GUI 编程等 C++ 编程领域。
C 和 C++ 的用户团体提供了免费的涵盖各种编程领域 C++ 项目的源代码,包括 AI、动画、编译器、数据库、调试、加密、游戏、图形、GUI、语言工具、系统编程等
codeproject是国外一个免费公开自己写的代码与程序的优秀网站,这个网站的所有用户都可以发布自己的写过的代码,程序,包括详细的文档说明。比国内的cnblog、csdn都要好,如果要说缺点的话,就是全英文的,当然大部分还是比较容易理解的。
2021年最新整理, C++ 学习资料,含C++ 11 / 14 / 17 / 20 / 23 新特性、入门教程、推荐书籍、优质文章、学习笔记、教学视频等
网上整理的一些C/C++资料
learncpp
learncpp
learncpp